package com.entmanage.base.hrm.mapper;

import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.entmanage.base.hrm.domain.HrmEmployee;
import com.entmanage.base.hrm.domain.HrmEmployeeCertificate;
import com.entmanage.base.hrm.domain.HrmEmployeeEducation;
import com.entmanage.base.hrm.domain.HrmEmployeeExperience;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 员工基本信息主Mapper接口
 *
 * @author lsq
 * @date 2025-07-24
 */
@Mapper
public interface HrmEmployeeMapper
{

    /**
     * 查询员工基本信息主
     *
     * @param empId 员工基本信息主主键
     * @return 员工基本信息主
     */
    public HrmEmployee selectHrmEmployeeByEmpId(Long empId);

    /**
     * 查询员工基本信息主列表
     *
     * @param hrmEmployee 员工基本信息主
     * @return 员工基本信息主集合
     */
    public List<HrmEmployee> selectHrmEmployeeList(HrmEmployee hrmEmployee);

    /**
     * 新增员工基本信息主
     *
     * @param hrmEmployee 员工基本信息主
     * @return 结果
     */
    public int insertHrmEmployee(HrmEmployee hrmEmployee);

    /**
     * 修改员工基本信息主
     *
     * @param hrmEmployee 员工基本信息主
     * @return 结果
     */
    public int updateHrmEmployee(HrmEmployee hrmEmployee);

    /**
     * 删除员工基本信息主
     *
     * @param empId 员工基本信息主主键
     * @return 结果
     */
    public int deleteHrmEmployeeByEmpId(Long empId);

    /**
     * 批量删除员工基本信息主
     *
     * @param empIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHrmEmployeeByEmpIds(Long[] empIds);

    /**
     * 批量删除员工工作经历子
     *
     * @param empIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHrmEmployeeExperienceByEmpIds(Long[] empIds);

    /**
     * 批量新增员工工作经历子
     *
     * @param hrmEmployeeExperienceList 员工工作经历子列表
     * @return 结果
     */
    public int batchHrmEmployeeExperience(List<HrmEmployeeExperience> hrmEmployeeExperienceList);


    /**
     * 通过员工基本信息主主键删除员工工作经历子信息
     *
     * @param empId 员工基本信息主ID
     * @return 结果
     */
    public int deleteHrmEmployeeExperienceByEmpId(Long empId);


    /**
     * 批量删除员工教育背景子
     * 
     * @param empIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHrmEmployeeEducationByEmpIds(Long[] empIds);
    
    /**
     * 批量新增员工教育背景子
     * 
     * @param hrmEmployeeEducationList 员工教育背景子列表
     * @return 结果
     */
    public int batchHrmEmployeeEducation(List<HrmEmployeeEducation> hrmEmployeeEducationList);
    

    /**
     * 通过员工基本信息主主键删除员工教育背景子信息
     * 
     * @param empId 员工基本信息主ID
     * @return 结果
     */
    public int deleteHrmEmployeeEducationByEmpId(Long empId);



    /**
     * 批量删除员工证书子
     *
     * @param empIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteHrmEmployeeCertificateByEmpIds(Long[] empIds);

    /**
     * 批量新增员工证书子
     *
     * @param hrmEmployeeCertificateList 员工证书子列表
     * @return 结果
     */
    public int batchHrmEmployeeCertificate(List<HrmEmployeeCertificate> hrmEmployeeCertificateList);


    /**
     * 通过员工基本信息主主键删除员工证书子信息
     *
     * @param empId 员工基本信息主ID
     * @return 结果
     */
    public int deleteHrmEmployeeCertificateByEmpId(Long empId);

    /**
     * 根据员工手机号查询员工信息
     */
    HrmEmployee selectEmployeeByMobile(@Param("mobile") String mobile);

    /**
     * 根据 user_id 查询员工
     */
    HrmEmployee selectEmployeeByUserId(@Param("userId") Long userId);

    /**
     * 根据生日的月和日查询员工（忽略年份），且状态为在职
     */
    List<HrmEmployee> selectEmployeesWithBirthdayOn(
            @Param("month") int month,
            @Param("day") int day
    );

    String selectEmailByEmpId(Long empId);

    List<HrmEmployee> selectHrmEmployeeByIds(Long[] ids);

    List<HrmEmployee> selectList( @Param("status") Integer status,
                                  @Param("delFlag") Integer delFlag);

    List<HrmEmployee> findByDelFlag(Integer delFlag);
}
